﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Collections;

namespace TechControl.BD
{
    class EquipamentoDB: BaseDB
    {
        private static EquipamentoDB instance;

        private EquipamentoDB() { }

        public static EquipamentoDB getInstance()
        {
            if (instance == null)
            {
                instance = new EquipamentoDB();
            }
            return instance;
        }

        //pega o ultimo código de equipamento inserido.
        public Int64 getLastCodEquip()
        {
            Int64 result = 0;
            try
            {
                this.open();
                SqlCommand command = new SqlCommand("Select MAX(ID_EQUIPAMENTO) FROM TB_EQUIPAMENTO;", this.conn);
                SqlDataReader rdr = command.ExecuteReader();

                while (rdr.Read())
                {
                    result = rdr.GetInt64(0);
                }
            }
            catch (Exception)
            {
                result = 0;
            }
            finally
            {
                this.close();
            }
            return result;
        }

        //inseri um novo registro.
        public bool insertNewEquip(Int64 cod_equip, string serial, string imei, string marca, string modelo, string descModelo, string status, 
                                   string data, string obs, string pat, string empresa)
        {
            bool result = true;
            try
            {
                this.open();
                SqlCommand command = new SqlCommand("insert into tb_equipamento values('" + cod_equip + "', '" + serial + "', '" + imei +
                    "', '" + marca + "', '" + modelo + "', '" + descModelo + "', '" + status + "', '" + data + "', '" + obs + "', '" + pat +
                    "', '" + empresa + "');", this.conn);
                command.ExecuteNonQuery();
            }
            catch (Exception) { result = false; }
            finally { this.close(); }
            return result;
        }

        //recebe os valores de uma consulta por código.
        private Equipamento toEquipamento(SqlDataReader reader)
        {
            Equipamento equipamento = new Equipamento();

            equipamento.codEquipamento = reader.GetInt64(0);
            equipamento.serial = reader.GetString(1);
            equipamento.imei = reader.GetString(2);
            equipamento.marca = reader.GetString(3);
            equipamento.modelo = reader.GetString(4);
            equipamento.descModelo = reader.GetString(5);
            equipamento.status = reader.GetString(6);
            equipamento.obs = reader.GetString(8);
            equipamento.pat = reader.GetString(9);
            equipamento.empresa = reader.GetString(10);

            return equipamento;
        }

        //busca todos os campos de um determinado código de equipamento.
        public ArrayList selectByCodEquip(Int64 codEquip)
        {
            ArrayList result = new ArrayList();

            try
            {
                this.open();
                SqlCommand command = new SqlCommand("Select * from tb_equipamento where id_equipamento = '" + codEquip + "';", this.conn);
                SqlDataReader rdr = command.ExecuteReader();

                while (rdr.Read())
                {
                    result.Add(this.toEquipamento(rdr));
                }
            }
            catch (Exception)
            {

            }
            finally
            {
                this.close();
            }
            return result;
        }

        //altera item de acordo com o id informado.
        public bool updateEquipByCod(Int64 codEquip, string serial, string imei, string marca, string modelo, string desModelo, string status, string obs,
                                     string data, string pat, string empresa)
        {
            bool result = false;
            try
            {
                this.open();
                SqlCommand command = new SqlCommand("update tb_equipamento set SERIAL = '" + serial + "', IMEI = '" + imei + "', MARCA = '" + marca +
                    "', MODELO = '" + modelo + "', DESC_MODELO = '" + desModelo + "', STATUS = '" + status + "', DATA_CADASTRO = '" + data +
                    "', OBS = '" + obs + "', PATRIMONIO = '" + pat + "', EMPRESA = '" + empresa + "' where id_equipamento = '" + codEquip + "';", this.conn);
                command.ExecuteNonQuery();
                result = true;
            }
            catch (Exception)
            {
            }
            finally
            {
                this.close();
            }
            return result;
        }

        //altera status do Equipamento para Descontinuado(excluido)
        public void updateDescEquip(Int64 cod)
        {
            try
            {
                this.open();
                SqlCommand command = new SqlCommand("update tb_equipamento set status = 'EXCLUIDO' where id_equipamento = '" + cod + "';", this.conn);
                command.ExecuteNonQuery();
            }
            finally
            {
                this.close();
            }
        }

        //busca valores do equipamento informado de acordo com serial.
        public ArrayList selectBySerial(string serial)
        {
            ArrayList result = new ArrayList();

            try
            {
                this.open();
                SqlCommand command = new SqlCommand("Select * from tb_equipamento where serial = '" + serial + "';", this.conn);
                SqlDataReader rdr = command.ExecuteReader();

                if (rdr.Read())
                {
                    result.Add(this.toEquipamento(rdr));
                }
            }
            catch (Exception)
            {
                result = null;
            }
            finally
            {
                this.close();
            }
            return result;
        }

        //checa se o equipamento existe na base.
        public bool verificaEquipBySerial(string serial)
        {
            bool result = false;

            try
            {
                this.open();
                SqlCommand command = new SqlCommand("select * from tb_equipamento where serial = '" + serial + "'", this.conn);
                SqlDataReader rdr = command.ExecuteReader();
                if (rdr.Read())
                {
                    result = true;
                }
            }
            finally
            {
                this.close();
            }
            return result;
        }

        //checa se o equipamento existe na base.
        public bool verificaEquipByIMEI(string imei)
        {
            bool result = false;

            try
            {
                this.open();
                SqlCommand command = new SqlCommand("select * from tb_equipamento where imei = '" + imei + "'", this.conn);
                SqlDataReader rdr = command.ExecuteReader();
                if (rdr.Read())
                {
                    result = true;
                }
            }
            finally
            {
                this.close();
            }
            return result;
        }

        //busca valores do equipamento informado de acordo com IMEI.
        public ArrayList selectByIMEI(string imei)
        {
            ArrayList result = new ArrayList();

            try
            {
                this.open();
                SqlCommand command = new SqlCommand("Select * from tb_equipamento where imei = '" + imei + "';", this.conn);
                SqlDataReader rdr = command.ExecuteReader();

                if (rdr.Read())
                {
                    result.Add(this.toEquipamento(rdr));
                }
            }
            catch (Exception)
            {
                result = null;
            }
            finally
            {
                this.close();
            }
            return result;
        }
    }
}
